/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Mail;

import java.io.Serializable;

/**
 *
 * @author yonmigongora@gmail.com
 */
public class MailServer implements Serializable {
    private ListaMensajes listMessage;
    private ListaUsuarios listUsuarios;
    /**
     * prepara al MailServer para poder funcionar.
     */
    public MailServer() {
        listMessage = new ListaMensajes();
        listUsuarios = new ListaUsuarios();
    }
    /**
     * consulta el numero de mensajes esperando por leer
     *
     * @param name el nombre del usuario que los solicita
     * @return la cantidad de mensajes esperando leer.
     */
    public int getMessagesWaiting(String name) {
        int contadorMensajes = 0;
        for (int i = 0; i < listMessage.longitud(); i++) {
            Message mensaje = listMessage.obtenerMensaje(i);
            String destinatario = mensaje.obtenerDestinatario();
            contadorMensajes = contadorMensajes + comparar(name, destinatario);
        }
        return contadorMensajes;
    }
    private int comparar(String user, String destinatario) {
        int contadorMensajes = 0;
        if (user.equals(destinatario)) {
            contadorMensajes++;
        }
        return contadorMensajes;
    }
    /**
     * obtiene el siguiente mensaje del usuario
     *
     * @param name el nombre del usuario que los solicita
     * @return el siguiente mensaje del usuario.
     */
    public Message getNextMessage(String name) {
        int contador = 0;
        boolean existe = false;
        Message msj = null;
        while (contador < listMessage.longitud() && existe == false) {
            msj = listMessage.obtenerMensaje(contador);
            String destinatario = msj.obtenerDestinatario();
            existe = destinatario.equals(name);
            contador++;
            listMessage.remove(msj);
            
        }
        return msj;
    }
   
    public ListaMensajes getMessages(String user) {
        ListaMensajes mensajesDelUsuario = new ListaMensajes();
        for (int i = 0; i < listMessage.longitud(); i++) {
            Message msj = listMessage.obtenerMensaje(i);
            compararYagregar(mensajesDelUsuario, msj, user);
        }
        return mensajesDelUsuario;
    }
    public ListaMensajes getMessagesLeidos(String user) {
        ListaMensajes mensajesDelUsuario = new ListaMensajes();
        for (int i = 0; i < listMessage.longitudLeido(); i++) {
            Message msj = listMessage.obtenerMensajeLeido(i);
            compararYagregar(mensajesDelUsuario, msj, user);
        }
        return mensajesDelUsuario;
    }    
    private void compararYagregar(ListaMensajes lista, Message msj, String user) {
        String dest = msj.obtenerDestinatario();
        if (dest.equals(user)) {
            lista.add(msj);
        }
    }
    /**
     * toma el mensaje del usuario y envia al destinatario
     *
     * @param message el contenido del mensaje del usuario
     */
    public void post(Message message) {
        listMessage.add(message);
    }
    public Message[] obtenerListaMensajes() {
        return listMessage.obtenerMensajes();
    }
    public String[] obtenerListaUsuarios() {
        return listUsuarios.obtenerUsuarios();
    }
    public void añadirUsuario(String usuario) {
        listUsuarios.agregarUsuario(usuario);
    }
}